package com.example.sportmeetserver.util;

import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.ToString;

@Getter
@RequiredArgsConstructor
@ToString
public class Result<T> {
    private final String code; // 状态码
    private final String msg; // 对状态说明
    private final T resultData; // 返回时，携带的数据, 为了扩展性好，使用泛型

    // 默认成功的构造器
    public Result() {
        this("200", "success", null);
    }

    // 带参构造器-指定返回的data
    public Result(T resultData) {
        this("200", "success", resultData);
    }

    // 编写方法-返回需要的Result对象-表示成功的Result
    public static <T> Result<T> success() {
        return new Result<>();
    }

    // 编写方法-返回需要的Result对象-表示成功的Result,同时可以携带数据
    public static <T> Result<T> success(T data) {
        return new Result<>(data);
    }

    // 编写方法-返回需要的Result对象-表示失败的Result
    public static <T> Result<T> error(String code, String msg) {
        return new Result<>(code, msg, null);
    }

    // 编写方法-返回需要的Result对象-表示失败的Result,同时可以携带数据
    public static <T> Result<T> error(String code, String msg, T data) {
        return new Result<>(code, msg, data);
    }
}